package stack_queue;

import arrays.DynamicTOurOwnArray;

/**
 * @program: play-structure
 * @description: 栈的实现代码，栈主要是数组的一半，栈顶在数组的右边
 * @author: baichen
 **/
public class ArrayStack<E> implements Stack<E> {
    DynamicTOurOwnArray<E> array;

    /**
     * 构造函数，传入数组的容量capacity构造Array
     * @param capacity
     */
    public ArrayStack(int capacity) {
        array=new DynamicTOurOwnArray<>(capacity);
    }

    public ArrayStack() {
        array=new DynamicTOurOwnArray<>();
    }

    // 获取数组中的元素个数
    @Override
    public int getSize() {
        return array.getSize();
    }

    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }

    @Override
    public void push(E e) {
        array.addLast(e);
    }

    @Override
    public E pop() {
        return array.delLast();
    }

    @Override
    public E peek() {
        return array.getLast();
    }

    /**
     * 查看静态数组的容量
     * @return  数组容量
     */
    public int getCapacity(){
        return array.getCapacity();
    }

    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();
        res.append("Stack: ");
        res.append('[');
        for(int i = 0 ; i < array.getSize() ; i ++){
            res.append(array.get(i));
            if(i != array.getSize() - 1)
                res.append(", ");
        }
        res.append("] top");	//横向排列，栈顶在数组右侧
        return res.toString();
    }
}
